<!--
 * @description  : 列表分屏展示组件
 * @descriptionDetail: 列表分屏展示组件
 * @copyright    : 浙江烟草
 * @author       : lcm
 * @create       : 2022-09-27 09:58:58
-->

<template>
  <view style="height: 100%; width: 100%; overflow: hidden; padding: 0px">
    <swiper
      class="swiper"
      :style="{'height': calcSwiperHeight() + 'px'}"
      :indicator-dots="indicatorDots"
      :autoplay="autoplay"
      :interval="interval"
      :duration="duration"
      indicator-active-color="#2979ff"
      @change="handleChangeSwiper"
    >
      <swiper-item class="swiper-item" v-if="slidePages.length == 0">
        <u-empty text="没有数据" mode="list"></u-empty>
      </swiper-item>
      <template v-else>
        <swiper-item class="swiper-item" v-for="(pItems, index) in slidePages" :key="index">
          <!-- 列表标题 -->
          <view class="table-header">
            <u-row gutter="8">
              <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="pIdx">
                <view
                  class="title"
                  :style="{
                    textAlign: item.align || 'center',
                    justifyContent: (!item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'center' : 'flex-start'),
                  }"
                  @tap="handleSort(item)"
                >
                  <view class="split-title" v-if="Array.isArray(item.label)">
                    <u-icon
                      name="arrow-down"
                      color="#2979ff"
                      label-color="#2979ff"
                      @tap="handleTapHeaderLabel(item.label)"
                      size="32"
                      label-pos="left"
                      :label="item.label[item.selectedIdx||0].label"
                    ></u-icon>
                    <u-select v-model="showLabelSelect" @confirm="handleSelectLabel" :list="labelList"></u-select>
                  </view>
                  <view class="split-title" style="font-size: 15px" v-else>
                    {{ item.label }}
                  </view>
                  <view class="sort-icon" v-if="typeof item.sort !== 'undefined'">
                    <u-icon :color="item.label != ifLabel ? '#bfbfbf' : (item.sort == 'asc' ? '#333' : '#bfbfbf')" name="arrow-up-fill"></u-icon>
                    <u-icon :color="item.label != ifLabel ? '#bfbfbf' : (item.sort == 'desc' ? '#333' : '#bfbfbf')" name="arrow-down-fill"></u-icon>
                  </view>
                </view>
              </u-col>
            </u-row>
          </view>
          <template v-if="contentSource.length == 0 && subContentSource.length == 0 && unknowSource.length == 0">
            <u-empty text="没有数据" mode="search"></u-empty>
          </template>
          <template v-else>
            <scroll-view
              :scroll-top="0" scroll-y="true" scroll-x="false"
              class="scroll-Y table-body"
            >
              <template v-if="isShowProv(1)">
                <template v-if="keyCode === 'admdiv' && !flag && contentSource.length > 0 && isShowProv(1)">
                  <u-row gutter="8" class="table-list-item">
                    <u-col span="12">
                      <view class="sw-title">
                        省内
                      </view>
                    </u-col>
                  </u-row>
                </template>
                <!-- 合计 -->
                <u-row gutter="8" class="table-list-item calc-list" v-if="contentSource.length > 0">
                  <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="item.key">
                    <view
                      class="list-item footer-item"
                      :style="{
                        textAlign: pIdx == 0 ? 'center' : (item.align || 'center'),
                        justifyContent: (pIdx == 0 || !item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'flex-end' : 'flex-start'),
                        color: contentColor(item, calcTotalObj[item.key])
                      }"
                    >
                      {{ pIdx==0 ? ("合计(" + unitName + ")") : calcTotalObj[item.key] }}
                    </view>
                  </u-col>
                </u-row>
                <!-- 列表内容 -->
                <u-row
                  gutter="8"
                  :class="'table-list-item ' + (itemKeyUuid === ds[keyCode] ? 'taped-item' : '')"
                  v-for="(ds, dIdx) in contentSource"
                  :key="ds.keyUuid"
                  @click.native="handleDoubleClick(ds)"
                >
                  <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="pIdx">
                    <view
                      class="list-item split-title"
                      :style="{
                        textAlign: item.align || 'center',
                        justifyContent: (!item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'flex-end' : 'flex-start'),
                        color: contentColor(item, ds[item.key])
                      }"
                      @tap="pIdx===0 && handleTapListItem(ds, dIdx)"
                    >
                      {{ ds[item.key] | roundNumFilter(item, ds, '1') }}
                    </view>
                  </u-col>
                </u-row>
              </template>
              <!-- 不明 -->
              <template v-if="keyCode === 'admdiv' && unknowSource.length > 0 && isShowProv(3)">
                <u-row gutter="8" class="table-list-item">
                  <u-col span="12">
                    <view class="sw-title">
                      不明
                    </view>
                  </u-col>
                </u-row>
                <u-row
                  gutter="8"
                  :class="'table-list-item ' + (itemKeyUuid === ds[keyCode] ? 'taped-item' : '')"
                  v-for="(ds, dIdx) in unknowSource"
                  :key="ds.keyUuid"
                >
                  <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="pIdx">
                    <view
                      class="list-item split-title"
                      :style="{
                        textAlign: item.align || 'center',
                        justifyContent: (!item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'flex-end' : 'flex-start'),
                        color: contentColor(item, ds[item.key])
                      }"
                      @tap="pIdx===0 && handleTapListItem(ds, dIdx)"
                    >
                      <view v-if="showEyes && pIdx === 0 && keyCode=='orgUuid' && !isPreview">
                        <u-icon
                          class="preview-icon"
                          v-show="itemKeyUuid == ds[keyCode]"
                          v-if="showEyes"
                          name="eye-fill"
                          color="#2979ff"
                          size="40"
                          @tap="handlePreviewArea(ds)"
                        ></u-icon>
                      </view>
                      {{ ds[item.key] | roundNumFilter(item, ds, '3') }}
                    </view>
                  </u-col>
                </u-row>
              </template>
              <!-- 来源地、去向地省外数据 -->
              <template v-if="keyCode === 'admdiv' && subContentSource.length > 0 && isShowProv(2)">
                <u-row gutter="8" class="table-list-item">
                  <u-col span="12">
                    <view class="sw-title">
                      省外
                    </view>
                  </u-col>
                </u-row>
                <!-- 合计 -->
                <u-row gutter="8" class="table-list-item calc-list" v-if="!flag">
                  <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="item.key">
                    <view
                      class="list-item footer-item"
                      :style="{
                        textAlign: pIdx == 0 ? 'center' : (item.align || 'center'),
                        justifyContent: (pIdx == 0 || !item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'flex-end' : 'flex-start'),
                        color: contentColor(item, subCalcTotalObj[item.key])
                      }"
                    >
                      {{ pIdx==0 ? ("合计(" + unitName + ")") : subCalcTotalObj[item.key] }}
                    </view>
                  </u-col>
                </u-row>
                <u-row
                  gutter="8"
                  :class="'table-list-item ' + (itemKeyUuid === ds[keyCode] ? 'taped-item' : '')"
                  v-for="(ds, dIdx) in subContentSource"
                  :key="ds.keyUuid"
                >
                  <u-col :span="item.width || 3" v-for="(item, pIdx) in pItems" :key="pIdx">
                    <view
                      class="list-item split-title"
                      :style="{
                        textAlign: item.align || 'center',
                        justifyContent: (!item.align || item.align == 'center') ? 'center' : (item.align == 'right' ? 'flex-end' : 'flex-start'),
                        color: contentColor(item, ds[item.key])
                      }"
                      @tap="pIdx===0 && handleTapListItem(ds, dIdx)"
                    >
                      <view v-if="showEyes && pIdx === 0 && keyCode=='orgUuid' && !isPreview">
                        <u-icon
                          class="preview-icon"
                          v-show="itemKeyUuid == ds[keyCode]"
                          v-if="showEyes"
                          name="eye-fill"
                          color="#2979ff"
                          size="40"
                          @tap="handlePreviewArea(ds)"
                        ></u-icon>
                      </view>
                      {{ ds[item.key] | roundNumFilter(item, ds, '2') }}
                    </view>
                  </u-col>
                </u-row>
              </template>
            </scroll-view>
          </template>
        </swiper-item>
      </template>
    </swiper>
  </view>
</template>
/**
  包含的功能：
  1、点击区域、品规，作为来源地、去向地的查询条件；点击区域，切换至品规显示指定区域品规；点击品规，切换区域显示指定品规的区域；
  2、双击区域下钻展示；
  3、点击标题栏右侧“刷新”按钮清除所有点击的查询条件；
  4、来源地(省内、不明、省外)、去向地(省内、省外)分开展示、分别统计：
    对应占比由前端计算；省内、不明、省外的占比合计数默认100%
  5、区域中切换显示：“卷烟数”来源地、去向地显示所有；其他切换是仅展示对应的（eg.省内、不明、省外）
*/
<script>
import {uuid,isDD,} from "@/common/util.js";
const screenHeight = uni.getSystemInfoSync().screenHeight;
const platformType = uni.getSystemInfoSync().platform;
let self;
export default {
  name: 'SwiperList',
  filters: {
    // 数字四舍五入
    roundNumFilter(vn, item, ds, f) {
      if (!vn || isNaN(vn)) {
        let vp = (vn || "--");
        if(vp.indexOf("市") === 0){
          return vp;
        }else{
          return vp.replace("市", "");
        }
      } else {
        // 计算占比
        if (item.selfCalc) {
          if (!self.flag) {   // 来源地
            if (f === '3') {  // 来源地不明默认占比100
              return '100.00';  // 按5.16新要求保留两位小数
            }
            return (ds["jyNum"] / ds[f === '1' ? "hjjyNum" : "hjswjyNum"] * 100).toFixed(2);
          } else {    // 去向地 (省内总数=合计值-省外数)
            if (f === '2') {  // 去向地省外地区、不明默认占比100
              return '100.00';  // 按5.16新要求保留两位小数
            }
            return (ds["jyNum"] / self.calcTotalObj['jyNum'] * 100).toFixed(2);
          }
        } else {
          let fNum = item.fixedNum;
          // let fNum = (vn + "").indexOf(".") !== -1 ? (vn + "").substring((vn + "").indexOf(".") + 1).length : 0;
          // 按5.16新要求保留两位小数
          return vn == '100' ? '100.00' : (fNum === 0 ? vn : vn.toFixed(2));
          // return vn == '100' ? vn : (fNum === 0 ? vn : vn.toFixed(2));
        }
      }
    },
  },
  props: {
    headers: {        // 标题栏
      type: Array,
      required: true,
    },
    dataSource: {     // 显示列数据
      type: Array,
      required: true,
    },
    keyCode: {    // 唯一主键标识
      type: String,
      default: "",
    },
    previewOrgUuid: {   // 当前预览的专卖局
      type: String,
      default: null,
    },
    flag: {     // 0查获，1被查获
      type: Number,
      default: 0,
    },
    areaSwiperIdx: {  // 区域屏显示的来源地数据标识：查获flag=1：0卷烟数(全部显示),1省内,2省外,3不明；被查获flag=1：0卷烟数,1省内,2省外
      type: Number,
      default: 0,
    },
    unitName: {   // 统计单位：万支、条
      type: String,
      default: '万支',
    },
    searchParam: {  // 已选中的查询条件
      type: Object,
      default: () => ({}),
    },
  },
  data() {
    let orgLevel = this.$storage.get(this.$rp.common.USER).orgLevel
    return {
      showEyes: orgLevel,
      slideNum: 0,
      slidePages: [],   // 分屏页展示内容
      contentSource: [],
      subContentSource: [], // 分开的列表数据，针对来源地、去向地
      unknowSource: [],   // 来源地、去向地不明数据
      calcTotalObj: {}, // 统计行数据
      subCalcTotalObj: {}, // 省外统计行数据
      headerLabelSelect: 0,
      screenHeight: screenHeight,
      background: ['color1', 'color2', 'color3',],
      indicatorDots: true,
      autoplay: false,
      interval: 2000,
      duration: 500,
      itemKeyUuid: null,  // 当前选中行序号
      isPreview: false,   // 是否已点击查看详情，默认仅能点击一次
      showLabelSelect: false,
      labelList: [],
      extraLabel: "",
      dbStartTime: 0, // 双击开始时间
      dbEndTime: 0,   // 双击结束时间
      dbIndex: 0,     // 双击标识
    }
  },
  computed: {
    // 计算可显示区域高度（苹果手机多减去40）
    calcSwiperHeight() {
      return () => this.screenHeight - 50 - (isDD() ? 85 : 45)
        - (platformType == 'ios' ? 60 : 0) - 28;
    },
    // 计算字体颜色
    contentColor() {
      return (item, val) => {
        if (!isNaN(val)) {
          return val * 1 >= 0 ? item.positiveColor : item.negativeColor;
        }
        return "#333";
      }
    },
    // 判断来源地、去向地内容展示
    isShowProv() {
      return (sliderIdx) => {
        // 区域第一屏点击的显示全部
        if (!this.areaSwiperIdx || this.keyCode !== 'admdiv') {
          return true;
        }
        // 1省内 2省外  3不明
        return sliderIdx === this.areaSwiperIdx;
      }
    },
  },
  watch: {
    searchParam: {
      deep: true,
      immediate: true,
      handler(v) {
        this.itemKeyUuid = v[this.keyCode];
      },
    },
    headers: {
      deep: true,
      immediate: true,
      handler(v) {
        this.slidePages = [];
        this.isPreview = !!this.previewOrgUuid;
        this.showLabelSelect = false;
        if (this.keyCode !== 'orgUuid') {
          this.extraLabel = "";
        }
        if (!v || v.length == 0) {
          return;
        }
        // 计算可以分屏数量
        this.calcSlideNum();
      },
    },
    dataSource: {
      deep: true,
      // immediate: true,
      handler(vs) {
        // TODO 针对来源地、去向地隔离本省与省外（目前仅针对浙江，重庆需调整）
        if (this.keyCode == 'admdiv') {
          this.contentSource = vs.filter(d => !d.displayOrder && d.areaName !== '不明' && d.area_code !== '999999');
          this.subContentSource = vs.filter(d => !this.flag ? d.displayOrder : d.area_code === '999999');
          this.unknowSource = vs.filter(d => d.areaName === '不明');
        } else {
          this.contentSource = vs.map(d => {
            // 补充一个主键
            d.keyUuid = uuid();
            return d;
          });
        }
        // 计算统计行
        this.calcTotal();
      },
    },
  },
  beforeCreate() {
    self = this;
  },
  methods: {
    // 计算可以分屏数量，fixed列重复计算
    calcSlideNum() {
      this.slidePages = this.headers;
      this.slideNum = this.headers.length;
    },
    // 计算统计行
    calcTotal() {
      let totalObj = {};
      let subTotalObj = {}; // 查获来源地省外统计
      this.headers.forEach(arr => {
        // 同比项
        let tbObj = null;
        arr.forEach(h => {
          // if (!h.total) {    // 是否合计
          //   totalObj[h.key] = "-";
          //   return;
          // }
          if (h.totalKeys && Array.isArray(h.totalKeys)) {  // 同比=(本期-同期)/同期
            tbObj = {key: h.key, totalKeys: h.totalKeys,};
            return;
          }
          // 主数据统计
          let totalNum = 0;
          let fixedNum = 0;
          // 如果显示指定字段值，则无需处理，直接获取
          if (h.showKey) {
            if (!this.flag) {   // 来源地
              totalObj[h.key] = (this.contentSource.length > 0 ? this.contentSource[0]['hjjyNum'] : 0).toFixed(2);
            } else {    // 去向地
              // 省外合计
              let swNum = this.subContentSource.length > 0 ? this.subContentSource[0]['jyNum'] : 0;
              totalObj[h.key] = ((this.contentSource.length > 0 ? this.contentSource[0]['hjjyNum'] : 0) - (swNum || 0)).toFixed(2);
            }
          } else {
            for (let d of this.contentSource) {
              if (!isNaN(d[h.key])) {
                totalNum = d[h.key] * 1 + totalNum;
                let fNum = (d[h.key] + "").indexOf(".") !== -1 ? (d[h.key] + "").substring((d[h.key] + "").indexOf(".") + 1).length : 0;
                fixedNum = Math.max(fNum, fixedNum);
              } else {
                return "-";
              }
            }
            // totalObj[h.key] = totalNum.toFixed(fixedNum);
            // 默认保留2位小数
            // totalObj[h.key] = totalNum.toFixed(Math.min(fixedNum, 1));
            // 按5.16新要求保留两位小数
            totalObj[h.key] = h.fixedNum === 0 || (h.totalFixedNum === 0 && totalNum.toFixed(0) == 100)
              ? '100.00' : totalNum.toFixed(2);
            // totalObj[h.key] = h.fixedNum === 0 || (h.totalFixedNum === 0 && totalNum.toFixed(0) == 100)
            //  ? totalNum.toFixed(0) : totalNum.toFixed(2);
          }
          // 查获来源地省外数据统计
          let subTotalNum = 0;
          // 如果显示指定字段值，则无需处理，直接获取(此处是省外合计，获取hjswjyNum)
          if (this.subContentSource.length > 0) {
            if (h.showKey) {
              // 区分来源地、去向地
              subTotalObj[h.key] = (this.subContentSource.length > 0 ? this.subContentSource[0][!this.flag ? 'hjswjyNum' : 'hjjyNum'] : 0).toFixed(2);
            } else {
              for (let d of this.subContentSource) {
                if (!isNaN(d[h.key])) {
                  subTotalNum = d[h.key] * 1 + subTotalNum;
                } else {
                  return "-";
                }
              }
              // 按5.16新要求保留两位小数
              subTotalObj[h.key] = h.fixedNum === 0 || (h.totalFixedNum === 0 && subTotalNum.toFixed(0) == 100)
                ? '100.00' : subTotalNum.toFixed(2);
              // subTotalObj[h.key] = h.fixedNum === 0 || (h.totalFixedNum === 0 && subTotalNum.toFixed(0) == 100)
              //   ? subTotalNum.toFixed(0) : subTotalNum.toFixed(2);
            }
          }
        });
        // 主数据统计
        if (tbObj) {
          if (!totalObj[tbObj.totalKeys[1]] || isNaN(totalObj[tbObj.totalKeys[1]]) || totalObj[tbObj.totalKeys[1]] == 0) {
            totalObj[tbObj.key] = "-";
          } else {
            totalObj[tbObj.key] = ((totalObj[tbObj.totalKeys[0]] - totalObj[tbObj.totalKeys[1]]) / totalObj[tbObj.totalKeys[1]] * 100).toFixed(2);
          }
        }
        // 查获来源地省外数据统计
        if (tbObj) {
          if (!subTotalObj[tbObj.totalKeys[1]] || isNaN(subTotalObj[tbObj.totalKeys[1]]) || subTotalObj[tbObj.totalKeys[1]] == 0) {
            subTotalObj[tbObj.key] = "-";
          } else {
            subTotalObj[tbObj.key] = ((subTotalObj[tbObj.totalKeys[0]] - subTotalObj[tbObj.totalKeys[1]]) / subTotalObj[tbObj.totalKeys[1]] * 100).toFixed(2);
          }
        }
      });
      totalObj["jyRatio"] = '100.00';  // 按5.16新要求保留两位小数
      this.calcTotalObj = totalObj;
      // 省外占比默认100%
      subTotalObj["jyRatio"] = '100.00'; // 按5.16新要求保留两位小数
      this.subCalcTotalObj = subTotalObj;
    },
    handleTapHeaderLabel(itemLabel) {
      this.labelList = itemLabel.map((d, idx) => Object.assign({}, d, {value: idx,extra: d.evt,}));
      this.showLabelSelect = true;
    },
    handleSelectLabel(arg) {
      this.showLabelSelect = false;
      this.extraLabel = arg[0].label;
      arg[0].extra && arg[0].extra(arg[0].value);
    },
    // 排序
    handleSort(item) {
      if (typeof item.sort === 'undefined') {
        return;
      }
      // 对列表数据进行排序
      this.contentSource = this.contentSource.sort((a, b) => item.sort == 'asc' ? (b[item.key] - a[item.key]) : (a[item.key] - b[item.key]));
      if (this.subContentSource.length > 0) {
        this.subContentSource = this.subContentSource.sort((a, b) => item.sort == 'asc' ? (b[item.key] - a[item.key]) : (a[item.key] - b[item.key]));
      }
      item.sort = item.sort == 'asc' ? 'desc' : 'asc';
    },
    // 点击列数据
    handleTapListItem(item) {
      this.itemKeyUuid = item[this.keyCode] === this.itemKeyUuid ? "" : item[this.keyCode];
      // 如果当前页是区域，则触发点击事件
      if (this.keyCode === 'orgUuid') {
        // 如果用户是首次点击，则提示操作说明
        // this.$storage.remove('IS_NOT_FIRST_ALERT');
        if (!this.$storage.get('IS_NOT_FIRST_ALERT')) {
          this.$modal.confirm('您当前点击了【' + item.areaName + '】,切换“品规”、“来源地/去向地”将展示【' + item.areaName + '】的数据，如果是误操作请点击右上角【刷新】',
            "操作提示", () => {
              this.$storage.set('IS_NOT_FIRST_ALERT', 1);
            }, null, "不再提示", "关闭");
        }
      }
      this.$emit("click-item", !this.itemKeyUuid ? {} : item, this.keyCode);

    },
    // 双击查看详情
    handleDoubleClick(item) {
      if(this.showEyes != 1 || this.isPreview){
        return false
      }
      this.dbIndex = this.dbIndex == 0 ? 1 : this.dbIndex + 1;
      if (this.dbIndex == 1) {
        this.dbStartTime = new Date().getTime();
        setTimeout(() => {
          this.dbIndex = this.dbStartTime = this.dbEndTime = 0;
        },200)
      } else if (this.dbIndex == 2) {
        // 双击仅针对区域
        if (this.keyCode !== 'orgUuid') {
          return;
        }
        this.dbEndTime = new Date().getTime();
        if (this.dbEndTime - this.dbStartTime < 300) {
          this.isPreview = true;
          this.$emit("preview", item);
        }
        this.dbIndex = this.dbStartTime = this.dbEndTime = 0;
      }
    },
    // 查看区域详情
    handlePreviewArea(item) {
      this.isPreview = true;
      this.$emit("preview", item);
    },
    // 滑屏切换
    handleChangeSwiper(swiperObj) {
      let currIdx = swiperObj.target.current;
      if (this.keyCode === 'orgUuid' && this.headers[currIdx][1].label) {
        this.$emit("resetTitle", this.headers[currIdx][1].label, currIdx);
      }
    },
  },

}
</script>
<style lang="scss" scoped>
$height: 6vh;
.table-header {
  width: 100%;
  height: $height;
  line-height: $height;
  background: #fafafa;
  // position: sticky;
  position: fixed;
  /* #ifdef H5-DINGDING  */
  top: 0px;
  /* #endif */
  /* #ifndef H5-DINGDING  */
  top: 0px;
  /* #endif */
  z-index: 100;
  .title {
    width: 100%;
    height: 100%;
    padding: 0px 3px;
    display: inline-flex;
    align-items: center;
    color: #222222;
    font-weight: 500;
  }
  .sort-icon {
    display: grid;
    height: 20px;
    margin-left: 3px;
    font-size: 10px;
    transform: scale(.8);
  }
  .split-title {
    // overflow: hidden;
    // text-overflow: ellipsis;
    // white-space: nowrap;
  }
}
.table-body {
  overflow-y: auto;
  position: absolute;
  height: calc(100% - 60px);
  top: $height;
  width: 100%;
  .list-item {
    width: 100%;
    height: 35px;
    line-height: 35px;
    padding: 0px 1px;
    // overflow: hidden;
    // text-overflow: ellipsis;
    white-space: nowrap;
    position: relative;
  }
  .table-list-item {
    background-color: #FFF !important;
    height: $height;
    border-bottom: 1px solid #dedede;
    /*&:nth-child(odd) {
      border-top: 1px solid #dedede;
      border-bottom: 1px solid #dedede;
      background-color: #f6f6f6 !important;
    }*/
  }
  .preview-icon {
    position: absolute;
    left: 5px;
    top: 8px;
  }
  .sw-title {
    font-weight: 600;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background-color: #fafafa;
  }
}
.calc-list {
  // font-weight: 600;
  color: #111;
  border-bottom: 1.5px solid #d7d5d5 !important;
}
.swiper {
  overflow: hidden;
  .header-label {
		margin-right: 0px;
	}
	.label-select {
		color: rgb(41, 121, 255);
	}
}
.table-body .table-list-item.taped-item {
  background-color: #e6e6e6 !important;
  font-weight: 600;
}
/deep/ uni-swiper .uni-swiper-dots-horizontal {
  bottom: 1px;
}
/deep/ [data-page] {
  overflow: hidden;
}
</style>
